/**
 * @Author: bug巫师 184179023@.com
 * @Date: 2025-04-30 09:15:41
 * @LastEditors: bug巫师 184179023@.com
 * @LastEditTime: 2025-04-30 09:15:41
 * @Description: 管理员控制器
 */

const BaseProjectAdminController = require('./base_project_admin_controller.js');
const AdminMgrService = require('../../service/admin/admin_mgr_service.js');
const timeUtil = require('../../../../framework/helpers/time_util.js');
const util = require('../../../../framework/helpers/util.js');

class AdminController extends BaseProjectAdminController {

    /** 
     * 管理员登录接口
     */
    async adminLogin() {
        console.log('[adminLogin] 开始处理管理员登录请求');
        
        try {
            // 数据校验
            let rules = {
                name: 'required|string|min:3|max:30',
                pwd: 'required|string|min:6|max:30',
            };
            
            // 取得数据
            let input;
            try {
                input = this.validateData(rules);
                console.log('[adminLogin] 数据验证通过');
            } catch (validateErr) {
                console.error('[adminLogin] 数据验证失败:', validateErr);
                // 仍然抛出错误，但提供更友好的信息
                throw new Error('用户名或密码格式错误: ' + validateErr.message);
            }

            console.log('[adminLogin] 调用adminLogin服务方法...');
            let service = new AdminMgrService();
            
            // 登录验证前先进行数据库自检
            await this.adminDbCheck(service);
            
            // 执行登录
            const result = await service.adminLogin(input.name, input.pwd, this._openId);
            console.log('[adminLogin] 登录成功');
            return result;
        } catch (err) {
            console.error('[adminLogin] 登录失败:', err);
            throw err;
        }
    }
    
    /**
     * 数据库自检 - 确保管理员账号存在
     */
    async adminDbCheck(service) {
        try {
            console.log('[adminDbCheck] 检查管理员数据库...');
            const AdminModel = require('../../../../config/models_config').admin_model;
            
            if (!AdminModel) {
                console.error('[adminDbCheck] AdminModel未定义');
                return;
            }
            
            // 检查是否存在管理员账号
            let adminCnt = 0;
            try {
                adminCnt = await AdminModel.count({});
                console.log('[adminDbCheck] 现有管理员账号数:', adminCnt);
            } catch (countErr) {
                console.error('[adminDbCheck] 查询管理员数量失败:', countErr);
                
                // 尝试直接查询
                try {
                    const cloudBase = require('../../../../framework/cloud/cloud_base.js');
                    const db = cloudBase.getCloud().database();
                    const cnt = await db.collection('oa_admin').count();
                    adminCnt = cnt.total;
                    console.log('[adminDbCheck] 直接查询管理员数量:', adminCnt);
                } catch (directCountErr) {
                    console.error('[adminDbCheck] 直接查询管理员数量也失败:', directCountErr);
                }
            }
            
            // 如果没有管理员账号，创建默认管理员
            if (adminCnt === 0) {
                console.log('[adminDbCheck] 没有管理员账号，创建默认管理员');
                
                // 尝试初始化系统
                try {
                    const BaseProjectService = require('../../service/base_project_service');
                    const baseService = new BaseProjectService();
                    await baseService.initSetup();
                    console.log('[adminDbCheck] 系统初始化完成');
                } catch (initErr) {
                    console.error('[adminDbCheck] 系统初始化失败:', initErr);
                    
                    // 尝试直接创建管理员
                    try {
                        console.log('[adminDbCheck] 尝试直接创建管理员');
                        const cloudBase = require('../../../../framework/cloud/cloud_base.js');
                        const db = cloudBase.getCloud().database();
                        
                        // 创建管理员数据
                        const adminData = {
                            ADMIN_NAME: 'admin',
                            ADMIN_PASSWORD: 'e10adc3949ba59abbe56e057f20f883e', // 123456的MD5
                            ADMIN_DESC: '超级管理员',
                            ADMIN_TYPE: 1,
                            ADMIN_STATUS: 1,
                            ADMIN_ADD_TIME: Math.floor(Date.now() / 1000),
                            ADMIN_EDIT_TIME: Math.floor(Date.now() / 1000),
                            ADMIN_LOGIN_CNT: 0
                        };
                        
                        await db.collection('oa_admin').add({ data: adminData });
                        console.log('[adminDbCheck] 直接创建管理员成功');
                    } catch (createErr) {
                        console.error('[adminDbCheck] 直接创建管理员失败:', createErr);
                    }
                }
            }
            
            console.log('[adminDbCheck] 管理员数据库检查完成');
        } catch (err) {
            console.error('[adminDbCheck] 检查过程出错:', err);
            // 不抛出错误，允许继续尝试登录
        }
    }

    /**
     * 管理员帐号管理
     */
    async adminMgr() {
        // 管理员打印不实现
        return [];
    }

    /**
     * 修改管理员
     */
    async adminEdit() {
        // 暂不实现
        return [];
    }

    /**
     * 管理员状态切换
     */
    async statusAdmin() {
        // 暂不实现
        return [];
    }

    /**
     * 删除管理员
     */
    async delAdmin() {
        // 暂不实现
        return [];
    }
}

module.exports = AdminController; 